#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>

int val = 100;
int main()
{
  pid_t id = fork();
  if(id < 0)
  {
    return 1;
  }
  else if(id == 0)
  {
    //子进程
    while(1)
    {
       printf("子进程 val: %d  &val: %p  pid: %d  ppid: %d\n ",val,&val,getpid(),getppid());
       val += 10;
       sleep(1);
     }
  }
  else
  { 
    while(1)
    {
       printf("父进程 val: %d  &val: %p  pid: %d  ppid: %d\n ",val,&val,getpid(),getppid());
       sleep(1);
    }   
  }
}




//#include <stdio.h>
//#include <unistd.h>
//#include <stdlib.h>
//
//int g_unval;
//int g_val = 100;
//int main(int argc, char *argv[], char *env[])
//{
//  const char *str = "helloworld";
//  printf("code addr: %p\n", main);
//  printf("init global addr: %p\n", &g_val);
//  printf("uninit global addr: %p\n", &g_unval);
//  static int test = 10;
//  char *heap_mem = (char*)malloc(10);
//  char *heap_mem1 = (char*)malloc(10);
//  char *heap_mem2 = (char*)malloc(10);
//  char *heap_mem3 = (char*)malloc(10);
//  printf("heap addr: %p\n", heap_mem); //heap_mem(0), &heap_mem(1)
////  printf("heap addr: %p\n", heap_mem1); //heap_mem(0), &heap_mem(1)
////  printf("heap addr: %p\n", heap_mem2); //heap_mem(0), &heap_mem(1)
////  printf("heap addr: %p\n", heap_mem3); //heap_mem(0), &heap_mem(1)
////  
////  printf("test static addr: %p\n", &test); //heap_mem(0), &heap_mem(1)
////  printf("stack addr: %p\n", &heap_mem); //heap_mem(0), &heap_mem(1)
////  printf("stack addr: %p\n", &heap_mem1); //heap_mem(0), &heap_mem(1)
////  printf("stack addr: %p\n", &heap_mem2); //heap_mem(0), &heap_mem(1)
////  printf("stack addr: %p\n", &heap_mem3);
////  printf("read only string addr: %p\n", str);
//////  for(int i = 0 ;i < argc; i++)
//////    {
//////      printf("argv[%d]: %p\n", i, argv[i]);
//////    }
//////  for(int i = 0; env[i]; i++)
//////    {
//////      printf("env[%d]: %p\n", i, env[i]);
//////    }
//////
////    return 0;
//////}
